Перейти к основному содержимому

4.4. Репликация и отказоустойчивость

Основные концепции хранения данных в Apache Ozone: Репликация и отказоустойчивость

Apache Ozone спроектирован для обеспечения высокой надёжности и доступности данных, используя механизмы репликации и отказоустойчивости. Система автоматически распределяет данные между узлами кластера и гарантирует, что данные останутся доступными даже в случае отказа одного или нескольких узлов.


1. Репликация данных

Репликация в Ozone означает создание нескольких копий блоков данных и размещение их на разных узлах DataNode. Это позволяет системе продолжать работу даже при сбое одного или нескольких узлов.

Основные параметры репликации:

  • Количество реплик: Определяет, сколько копий каждого блока данных будет создано. По умолчанию Ozone использует 3 реплики.
  • Распределение реплик: SCM (Storage Container Manager) следит за тем, чтобы реплики блоков размещались на разных узлах для максимальной отказоустойчивости.
  • Поддержка репликации для контейнеров: Каждый контейнер данных также реплицируется между DataNodes.

Настройка уровня репликации:

Вы можете настроить уровень репликации для бакета или ключа:

bin/ozone sh bucket setreplication /myvolume/mybucket --replication=3

2. Типы репликации

Ozone поддерживает несколько схем репликации:

  • Репликация на основе копий: Несколько идентичных копий блока хранятся на разных узлах. Этот метод прост и эффективен для обеспечения отказоустойчивости.

  • Эрasure Coding (кодирование с восстановлением): Данные разбиваются на фрагменты и дополняются фрагментами восстановления. Это позволяет сократить объём хранимых данных, сохраняя отказоустойчивость, но требует больше вычислительных ресурсов при восстановлении данных.

Пример включения Erasure Coding для бакета:

bin/ozone sh bucket setec /myvolume/mybucket --ec=rs-3-2-1024k
  • rs-3-2: 3 фрагмента данных и 2 фрагмента восстановления.
  • 1024k: Размер одного фрагмента.

3. Отказоустойчивость в Ozone

Ozone спроектирован для продолжения работы при сбоях узлов, благодаря:

  • Автоматическому восстановлению реплик: Если узел выходит из строя, система создаёт недостающие реплики на других узлах.
  • Распределённому хранению: SCM следит за тем, чтобы блоки данных и их реплики размещались на разных DataNodes.
  • Восстановлению после отказов: Ozone автоматически восстанавливает данные и реплики при сбоях, используя информацию из SCM.

4. Процесс восстановления данных

  1. Обнаружение сбоя: SCM отслеживает состояние всех DataNodes и уведомляет о сбое.
  2. Перераспределение реплик: Если узел выходит из строя, SCM идентифицирует недостающие реплики и инициирует их создание на других узлах.
  3. Восстановление контейнеров: Недостающие контейнеры восстанавливаются из доступных реплик.
  4. Проверка консистентности: Ozone использует Raft-протокол (через Apache Ratis) для поддержания консистентности данных между узлами SCM и OM.

5. Проверка репликации и состояния узлов

Вы можете использовать команды для мониторинга состояния реплик и узлов.

  • Просмотр состояния узлов:

    bin/ozone admin datanode list
  • Проверка репликации контейнеров:

    bin/ozone admin container list --verbose
  • Восстановление реплики вручную: Если система не смогла автоматически восстановить реплику, можно инициировать процесс вручную:

    bin/ozone admin container recover <container-id>

6. Пример: Обработка отказа DataNode

  1. Вывод одного из DataNode из строя: Вы можете остановить DataNode для имитации сбоя:

    bin/ozone datanode --daemon stop
  2. Проверка статуса репликации: После отключения узла используйте следующую команду для проверки:

    bin/ozone admin container list --missing
  3. Восстановление реплик: Если система обнаружила недостающие реплики, она автоматически инициирует их восстановление на других узлах.


7. Настройка параметров репликации и отказоустойчивости

Вы можете настроить параметры репликации в файле ozone-site.xml:

<configuration>
<!-- Настройка уровня репликации по умолчанию -->
<property>
<name>ozone.replication</name>
<value>3</value>
</property>

<!-- Интервал проверки состояния узлов -->
<property>
<name>ozone.scm.heartbeat.interval</name>
<value>30s</value>
</property>

<!-- Таймаут для обнаружения отключения узла -->
<property>
<name>ozone.scm.datanode.failure.threshold</name>
<value>120s</value>
</property>
</configuration>

После внесения изменений перезапустите компоненты Ozone для применения настроек.


Итог

Репликация и отказоустойчивость являются ключевыми аспектами Apache Ozone. Система автоматически создаёт несколько копий данных, распределяет их по узлам и восстанавливает реплики при сбоях. Поддержка Erasure Coding позволяет оптимизировать использование ресурсов при сохранении высокой надёжности. Ozone предоставляет мощные инструменты для управления репликацией и мониторинга состояния узлов, что делает его надёжной платформой для хранения данных в распределённой среде.